package br.com.skpharma.dao;

import java.util.ArrayList;

import br.com.skpharma.db.DB;
import br.com.skpharma.vo.CidadeVO;
import br.com.skpharma.vo.EnderecoVO;
import br.com.skpharma.vo.FuncionarioVO;
import br.com.skpharma.vo.PerfilVO;

public class DAOFuncionario {
	private DB db = new DB("jdbc:postgresql://localhost:5432/skpharma","postgres","postgres");
	private FuncionarioVO funcionario;
	
	public DAOFuncionario(){
		funcionario = new FuncionarioVO();
	}
	
	public void setFuncionario(FuncionarioVO nFuncionarioVO){
		funcionario = nFuncionarioVO;
	}

	public FuncionarioVO getFuncionarioVO(){
		return(funcionario);
	}
	
	
	public void salvar(){

		if(db.connect()){
			
			System.out.println("insert into funcionario (login,senha,nome,datanasc,cpf,telefone,celular,rua,cep,bairro,numero,cod_cidade,salario,cod_perfil) values ('"+ 
				 	funcionario.getLogin()+	 
					  "','"+funcionario.getSenha() +
					  "','"+funcionario.getNome()+
					  "','"+funcionario.getDataNasc()+
					  "','"+funcionario.getCpf()+
					  "','"+funcionario.getTelefone()+
					  "','"+funcionario.getCelular()+
					  "','"+funcionario.getEnderecoVO().getRua()+
					  "','"+funcionario.getEnderecoVO().getCep()+
					  "','"+funcionario.getEnderecoVO().getBairro()+
					  "','"+funcionario.getEnderecoVO().getNumero()+
					  "','"+funcionario.getEnderecoVO().getCidadeVO().getCod() +
					  "','"+funcionario.getSalario() +
					  "','"+funcionario.getPerfilVO().getCod() +
					  "')");
			System.out.println();
			db.update("insert into funcionario (login,senha,nome,datanasc,cpf,telefone,celular,rua,cep,bairro,numero,cod_cidade,salario,cod_perfil) values ('"+ 
				 	funcionario.getLogin()+	 
					  "','"+funcionario.getSenha() +
					  "','"+funcionario.getNome()+
					  "','"+funcionario.getDataNasc()+
					  "','"+funcionario.getCpf()+
					  "','"+funcionario.getTelefone()+
					  "','"+funcionario.getCelular()+
					  "','"+funcionario.getEnderecoVO().getRua()+
					  "','"+funcionario.getEnderecoVO().getCep()+
					  "','"+funcionario.getEnderecoVO().getBairro()+
					  "','"+funcionario.getEnderecoVO().getNumero()+
					  "','"+funcionario.getEnderecoVO().getCidadeVO().getCod() +
					  "','"+funcionario.getSalario() +
					  "','"+funcionario.getPerfilVO().getCod() +
					  "')");
			db.disconnect();
		}		
	}
	
	public void excluir(){
		if(db.connect()){
			db.update("delete from funcionario where cod_funcionario = " + funcionario.getCod() );			
			db.disconnect();
		}		
	}
	
	public void editar(){		
		if(db.connect()){
			db.update("update funcionario set login='"+ funcionario.getLogin() +"'," +
					"senha='"+ funcionario.getSenha() +"'," +
					"nome='"+ funcionario.getNome() +"'," +
					"datanasc='"+ funcionario.getDataNasc() +"'," +
					"cpf='"+ funcionario.getCpf() +"'," +
					"telefone='"+ funcionario.getTelefone() +"'," +
					"celular='"+ funcionario.getCelular() +"'," +
					"rua='"+ funcionario.getEnderecoVO().getRua() +"'," +
					"cep='"+ funcionario.getEnderecoVO().getCep() +"'," +
					"bairro='"+ funcionario.getEnderecoVO().getBairro() +"'," +
					"numero='"+ funcionario.getEnderecoVO().getNumero() +"'," +
					"cod_cidade='"+ funcionario.getEnderecoVO().getCidadeVO().getCod() +"'," +
					"salario='"+ funcionario.getSalario() +
					"'where cod_funcionario= " + funcionario.getCod());			
			db.disconnect();
		}		
	}
	
	public ArrayList obterLista(){
		ArrayList lista = new ArrayList();
		FuncionarioVO funcionarioVO;
		DAOCidade daoCidade;
		if(db.connect()){
			db.select("select funcionario.* ,cidade.ds_cidade as ci_descricao, perfil.ds_perfil as ds_perfil from funcionario,cidade,perfil where perfil.cod_perfil = funcionario.cod_perfil and funcionario.cod_cidade = cidade.cod_cidade order by nome");
			while(db.moveNext()){
				daoCidade = new DAOCidade();
				daoCidade.carregar(db.getInt("cd_cidade"));
				funcionarioVO = new FuncionarioVO( db.getInt("cod_funcionario"),  db.getString("login"), db.getString("senha"),   db.getString("nome"),    db.getDate("datanasc") ,   db.getString("cpf"),   db.getString("telefone"),   db.getString("celular"),   db.getFloat("salario"), new EnderecoVO( db.getString("rua"), db.getInt("numero"), db.getString("bairro"), db.getString("cep"), new CidadeVO( db.getInt("cod_cidade"),   db.getString("ci_descricao"))), new PerfilVO(db.getInt("cod_perfil"),db.getString("ds_perfil")));
				lista.add(funcionarioVO);
			}
			db.disconnect();
		}		
		return lista;
	}
	
	public void obter(int codigo){		
		if(db.connect()){
			db.select("select funcionario.*,cidade.ds_cidade as ds_cidade,perfil.ds_perfil as ds_perfil from funcionario,cidade,perfil where funcionario.cod_cidade = cidade.cod_cidade and perfil.cod_perfil = funcionario.cod_perfil and cod_funcionario =" + codigo);
			if(db.moveNext()){				
				funcionario.setCod(db.getInt("cod_funcionario"));
				funcionario.setLogin(db.getString("login"));
				funcionario.setSenha(db.getString("senha"));
				funcionario.setNome(db.getString("nome"));
				funcionario.setDataNasc(db.getDate("datanasc"));
				funcionario.setTelefone(db.getString("telefone"));
				funcionario.setCelular(db.getString("celular"));
				funcionario.setSalario(db.getFloat("salario"));
				funcionario.setCpf(db.getString("cpf"));
				funcionario.getEnderecoVO().setRua(db.getString("rua"));
				funcionario.getEnderecoVO().setCep(db.getString("cep"));		
				funcionario.getEnderecoVO().setBairro(db.getString("bairro"));
				funcionario.getEnderecoVO().setNumero(db.getInt("numero"));

				DAOCidade daoCidade = new DAOCidade();
				daoCidade.carregar(db.getInt("cod_cidade"));
				funcionario.getEnderecoVO().setCidadeVO(daoCidade.getCidadeVO());
				
				DAOPerfil daoPerfil = new DAOPerfil();
				daoPerfil.carregar(db.getInt("cod_perfil"));
				funcionario.setPerfilVO(daoPerfil.getPerfilVO());				
			}
			
			db.disconnect();
		}		
	}

}